package com.ran.gpstestbed;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.ColorInt;
import androidx.appcompat.app.AppCompatActivity;
import androidx.wear.tiles.material.Button;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.charts.RadarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.data.RadarData;
import com.github.mikephil.charting.data.RadarDataSet;
import com.github.mikephil.charting.data.RadarEntry;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.util.ArrayList;
import java.util.List;

public class Graph1 extends AppCompatActivity {

    private LineChart line;
    private Button buttong;
    private RadarChart radar;
    List<RadarEntry> list1;
    List<RadarEntry> list2;
    List<RadarEntry> list3;




    List<Entry> list = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graph1);
        line = (LineChart) findViewById(R.id.linechart1);










/*
        //获取 bundle
        Bundle bundle = getIntent().getExtras();    //得到传过来的bundle
        int tab2lon=Integer.parseInt(bundle.getString("tab2lon"));
        int tab2lat=Integer.parseInt(bundle.getString("tab2lat"));
        int tab2id1=Integer.parseInt(bundle.getString("tab2id1"));
        int tab2si1=Integer.parseInt(bundle.getString("tab2si1"));
        int tab2po11=Integer.parseInt(bundle.getString("tab2po11"));
        int tab2po12=Integer.parseInt(bundle.getString("tab2po12"));
        int tab2po13=Integer.parseInt(bundle.getString("tab2po13"));
        int tab2id2=Integer.parseInt(bundle.getString("tab2id2"));
        int tab2si2=Integer.parseInt(bundle.getString("tab2si2"));
        int tab2po21=Integer.parseInt(bundle.getString("tab2po21"));
        int tab2po22=Integer.parseInt(bundle.getString("tab2po22"));
        int tab2po23=Integer.parseInt(bundle.getString("tab2po23"));
        int tab2id3=Integer.parseInt(bundle.getString("tab2id3"));
        int tab2si3=Integer.parseInt(bundle.getString("tab2si3"));
        int tab2po31=Integer.parseInt(bundle.getString("tab2po31"));
        int tab2po32=Integer.parseInt(bundle.getString("tab2po32"));
        int tab2po33=Integer.parseInt(bundle.getString("tab2po33"));
        int tab2id4=Integer.parseInt(bundle.getString("tab2id4"));
        int tab2si4=Integer.parseInt(bundle.getString("tab2si4"));
        int tab2po41=Integer.parseInt(bundle.getString("tab2po41"));
        int tab2po42=Integer.parseInt(bundle.getString("tab2po42"));
        int tab2po43=Integer.parseInt(bundle.getString("tab2po43"));
        int tab2id5=Integer.parseInt(bundle.getString("tab2id5"));
        int tab2si5=Integer.parseInt(bundle.getString("tab2si5"));
        int tab2po51=Integer.parseInt(bundle.getString("tab2po51"));
        int tab2po52=Integer.parseInt(bundle.getString("tab2po52"));
        int tab2po53=Integer.parseInt(bundle.getString("tab2po53"));


*/

        //获取 bundle
        Bundle bundle = getIntent().getExtras();    //得到传过来的bundle
        double tab2lon=  30.745855;
        double tab2lat=103.921516;
        int tab2id1=2;
        int tab2si1=36;
        int tab2po11= (int) -2086619.974470;
        int tab2po12= (int) 15421901.868830;
        int tab2po13= (int) 22178563.646350;
        int tab2id2=5;
        int tab2si2=27;
        int tab2po21= (int) 4294564.988685;
        int tab2po22= (int) 26006944.465978;
        int tab2po23= (int) 2167947.556930;
        int tab2id3=12;
        int tab2si3=40;
        int tab2po31= (int) 9771101.339039;
        int tab2po32= (int) 22298751.717416;
        int tab2po33= (int) 10541178.874085;
        int tab2id4=19;
        int tab2si4=25;
        int tab2po41= (int) -20110232.740946;
        int tab2po42= (int) 16813180.936138;
        int tab2po43= (int) 3624934.296252;
        int tab2id5=25;
        int tab2si5=31;
        int tab2po51= (int) 15351967.975408;
        int tab2po52= (int) 10491728.060910;
        int tab2po53= (int) 18803353.086736;


        int tab2si_av = (tab2si1+tab2si2+tab2si3+tab2si4+tab2si5)/5;











        //折线统计图
        //添加数据
        list.add(new Entry(0, tab2si_av));
        list.add(new Entry(1, tab2si1));     //其中两个数字对应的分别是   X轴   Y轴
        list.add(new Entry(2, tab2si2));
        list.add(new Entry(3, tab2si3));
        list.add(new Entry(4, tab2si4));
        list.add(new Entry(5, tab2si5));





        LineDataSet lineDataSet = new LineDataSet(list, "信号强度");   //list是你这条线的数据  "语文" 是你对这条线的描述
        LineData lineData = new LineData(lineDataSet);
        line.setData(lineData);


        //折线图背景
        line.setBackgroundColor(colorR.wightR);   //背景颜色
        line.getXAxis().setDrawGridLines(true);  //是否绘制X轴上的网格线（背景里面的竖线）
        line.getAxisLeft().setDrawGridLines(true);  //是否绘制Y轴上的网格线（背景里面的横线）

        //对于右下角一串字母的操作
        line.getDescription().setEnabled(false);                  //是否显示右下角描述
        line.getDescription().setText("这是修改那串英文的方法");    //修改右下角字母的显示
        line.getDescription().setTextSize(20);                    //字体大小
        line.getDescription().setTextColor(Color.RED);             //字体颜色

        //图例
        Legend legend = line.getLegend();
        legend.setEnabled(true);    //是否显示图例
        legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);    //图例的位置
        legend.setTextColor(colorR.darkR);

        //X轴
        XAxis xAxis = line.getXAxis();
        xAxis.setDrawGridLines(false);  //是否绘制X轴上的网格线（背景里面的竖线）
        xAxis.setAxisLineColor(colorR.darkR);   //X轴颜色
        xAxis.setAxisLineWidth(2);           //X轴粗细
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);        //X轴所在位置   默认为上面
        xAxis.setValueFormatter(new IAxisValueFormatter() {   //X轴自定义坐标
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {
                if (v == 1) {
                    return "G"+tab2id1;
                }
                if (v == 2) {
                    return  "G"+tab2id2;
                }
                if (v == 3) {
                    return  "G"+tab2id3;
                }
                if (v == 4) {
                    return  "G"+tab2id4;
                }
                if (v == 5) {
                    return  "G"+tab2id5;
                }
                if (v == 0) {
                    return  "平均值";
                }
                return "";//注意这里需要改成 ""
            }
        });
        xAxis.setAxisMaximum(5);   //X轴最大数值
        xAxis.setAxisMinimum(0);   //X轴最小数值
        //X轴坐标的个数    第二个参数一般填false     true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
        xAxis.setLabelCount(5, false);

        xAxis.setTextColor(colorR.darkR);


        //Y轴
        YAxis AxisLeft = line.getAxisLeft();
        AxisLeft.setDrawGridLines(false);  //是否绘制Y轴上的网格线（背景里面的横线）
        AxisLeft.setAxisLineColor(colorR.darkR);  //Y轴颜色
        AxisLeft.setAxisLineWidth(2);           //Y轴粗细
        AxisLeft.setValueFormatter(new IAxisValueFormatter() {  //Y轴自定义坐标
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {

                for (int a = 0; a < 46; a+=5) {     //用个for循环方便
                    if (a == v) {
                        return a + "" ;
                    }
                }

                return "";
            }
        });
        AxisLeft.setAxisMaximum(45);   //Y轴最大数值
        AxisLeft.setAxisMinimum(0);   //Y轴最小数值
        //Y轴坐标的个数    第二个参数一般填false     true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
        AxisLeft.setLabelCount(15, false);

        AxisLeft.setTextColor(colorR.darkR);//-Y轴字体颜色

        //是否隐藏右边的Y轴（不设置的话有两条Y轴 同理可以隐藏左边的Y轴）
        line.getAxisRight().setEnabled(false);


        //折线
        //设置折线的式样   这个是圆滑的曲线（有好几种自己试试）     默认是直线
        lineDataSet.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
        lineDataSet.setColor(colorR.mainR);  //折线的颜色
        lineDataSet.setLineWidth(2);        //折线的粗细
        //是否画折线点上的空心圆  false表示直接画成实心圆
        lineDataSet.setDrawCircleHole(true);
        lineDataSet.setCircleHoleRadius(3);  //空心圆的圆心半径
        //圆点的颜色     可以实现超过某个值定义成某个颜色的功能   这里先不讲 后面单独写一篇
        lineDataSet.setCircleColor(colorR.redR);
        lineDataSet.setCircleRadius(3);      //圆点的半径
        //定义折线上的数据显示    可以实现加单位    以及显示整数（默认是显示小数）

        lineDataSet.setValueTextColor(colorR.redR);//-折线的字体颜色

        lineDataSet.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
                if (entry.getY() == v) {
                    return v + "";
                }
                return "";
            }
        });

        //数据更新
        line.notifyDataSetChanged();
        line.invalidate();

        //动画（如果使用了动画可以则省去更新数据的那一步）
//        line.animateY(3000); //折线在Y轴的动画  参数是动画执行时间 毫秒为单位
//        line.animateX(2000); //X轴动画
        //line.animateXY(2000, 2000);//XY两轴混合动画
        line.animateY(3000, Easing.EasingOption.EaseInOutBack);











//返回按钮
        View buttong=findViewById(R.id.buttong);
        buttong.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
















//雷达图
        radar = (RadarChart) findViewById(R.id.radar1);
        list1 = new ArrayList<>();
        list2 = new ArrayList<>();
        list3 = new ArrayList<>();


        list1.add(0,new RadarEntry(tab2po11));
        list1.add(1,new RadarEntry(tab2po21));
        list1.add(2,new RadarEntry(tab2po31));
        list1.add(3,new RadarEntry(tab2po41));
        list1.add(4,new RadarEntry(tab2po51));

        list2.add(0,new RadarEntry(tab2po12));
        list2.add(1,new RadarEntry(tab2po22));
        list2.add(2,new RadarEntry(tab2po32));
        list2.add(3,new RadarEntry(tab2po42));
        list2.add(4,new RadarEntry(tab2po52));

        list3.add(0,new RadarEntry(tab2po13));
        list3.add(1,new RadarEntry(tab2po23));
        list3.add(2,new RadarEntry(tab2po33));
        list3.add(3,new RadarEntry(tab2po43));
        list3.add(4,new RadarEntry(tab2po53));






        //标签
        RadarDataSet radarDataSet = new RadarDataSet(list1, "po1");
        radarDataSet.setColor(colorR.mainR);
        RadarDataSet radarDataSet1 = new RadarDataSet(list2, "po2");
        radarDataSet1.setColor(colorR.brightR);
        RadarDataSet radarDataSet2 = new RadarDataSet(list2, "po3");
        radarDataSet2.setColor(colorR.yellowR);
        RadarData radarData = new RadarData(radarDataSet,radarDataSet1,radarDataSet2);
        radar.setData(radarData);

        //Y轴最小值不设置会导致数据中最小值默认成为Y轴最小值
        radar.getYAxis().setAxisMinimum(0);



        //大字的颜色（中心点和各顶点的连线）
        radar.setWebColor(colorR.darkR);
        //所有五边形的颜色
        radar.setWebColorInner(colorR.darkR);
        //整个控件的背景颜色
        radar.setBackgroundColor(colorR.wightR);

        //动画
        radar.animateXY(200,200, Easing.EasingOption.EaseInOutBack, Easing.EasingOption.EaseInOutBack);


        XAxis xAxis1 = radar.getXAxis();
        xAxis1.setTextColor(colorR.darkR);//X轴字体颜色
        xAxis1.setTextSize(16);     //X轴字体大小
        //自定义X轴坐标描述（也就是五个顶点上的文字,默认是0、1、2、3、4）
        xAxis1.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {
                if (v == 0) {
                    return "G"+tab2id1;
                }
                if (v == 1) {
                    return "G"+tab2id2;
                }
                if (v == 2) {
                    return "G"+tab2id3;
                }
                if (v == 3) {
                    return "G"+tab2id4;
                }
                if (v == 4) {
                    return "G"+tab2id5;
                }
                return "";
            }
        });
        xAxis1.setAxisMinimum(0);
        xAxis1.setAxisMaximum(4);


        //是否绘制雷达框上对每个点的数据的标注    和Y轴坐标点一般不同时存在 否则显得很挤  默认为true
        radarDataSet.setDrawValues(true);
        radarDataSet1.setDrawValues(true);
        radarDataSet2.setDrawValues(true);
        //radarDataSet.setValueTextSize(1);  //数据值得字体大小（这里只是写在这）
        radarDataSet.setValueTextColor(colorR.redR);//数据值得字体颜色（这里只是写在这）
        radarDataSet1.setValueTextColor(colorR.redR);
        radarDataSet2.setValueTextColor(colorR.redR);
        //粗细
        radarDataSet.setLineWidth(2);
        radarDataSet1.setLineWidth(2);
        radarDataSet2.setLineWidth(2);

        YAxis yAxis = radar.getYAxis();
        //是否绘制Y轴坐标点  和雷达框数据一般不同时存在 否则显得很挤 默认为true
        yAxis.setDrawLabels(true);
        yAxis.setTextColor(colorR.darkR);//Y轴坐标数据的颜色
        yAxis.setAxisMaximum(50000000);   //Y轴最大数值
        yAxis.setAxisMinimum(-50000000);   //Y轴最小数值
        //Y轴坐标的个数    第二个参数一般填false     true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
        yAxis.setLabelCount(6, false);


        //对于右下角一串字母的操作
        radar.getDescription().setEnabled(false);                  //是否显示右下角描述
        radar.getDescription().setText("这是修改那串英文的方法");    //修改右下角字母的显示
        radar.getDescription().setTextSize(20);                    //字体大小
        radar.getDescription().setTextColor(Color.CYAN);             //字体颜色

        //图例
        Legend legend1 = radar.getLegend();
        legend1.setEnabled(true);    //是否显示图例
        legend1.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);    //图例的位置
        legend1.setTextColor(colorR.darkR);//-图例文字颜色

        //>?
        radarDataSet.setHighlightCircleFillColor(colorR.redR);
        radarDataSet1.setHighlightCircleFillColor(colorR.redR);
        radarDataSet2.setHighlightCircleFillColor(colorR.redR);

    }
}



class colorR {
    @ColorInt
    public static final int mainR      = 0xFF95A503;
    @ColorInt
    public static final int brightR      = 0xFFE0E79A;
    @ColorInt
    public static final int darkR      = 0xFF746909;
    @ColorInt
    public static final int bgbR      = 0xFFBDBDBD;
    @ColorInt
    public static final int bgdR      = 0xFF222222;
    @ColorInt
    public static final int redR      = 0xFFD57373;
    @ColorInt
    public static final int yellowR      = 0xFFf8df70;
    @ColorInt
    public static final int hlR      = 0xFFE0E79A;
    @ColorInt
    public static final int wightR      = 0xFFF8F8F5;



}

/**
 * problems:
 * 1. RadarData radarData = new RadarData(radarDataSet,radarDataSet1,radarDataSet2);
 * 无法显示中间的数据据
 */